/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2021/11/30
 * \* Time: 16:04
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */

class  MyArrayList<E>{//此时的E代表当前类是一个泛型类，此时的E就是一个占位符而已

    //思考：
    //1.只能存放整数的数据，不通用，
    //我们想：能不能啥都可以放，改成Object?
    private E[] elem;
    private int useSize;

    //提供两个构造方法
    public MyArrayList(){
        this.elem=(E[]) new Object[10];
    }
    public void add(E val){
        this.elem[useSize]=val;
        useSize++;
    }
    public Object get(int pos){
        return this.elem[pos];
    }
}
public class TestDemo2 {

    public static void main(String[] args) {
        //打印出来没有<>
        //得出结论：泛型中<>中的内容，不参与类型的组成

        //问题：泛型是怎么编译的？
        //1.泛型是编译十七的一种机制，擦除机制
        MyArrayList<String> myArrayList=new MyArrayList<>();
        System.out.println(myArrayList);
        MyArrayList<Integer> myArrayList1=new MyArrayList<>();
        System.out.println(myArrayList1);
        MyArrayList<Boolean> myArrayList2=new MyArrayList<>();
        System.out.println(myArrayList2);
    }

    public static void main3(String[] args) {
        MyArrayList<String> myArrayList=new MyArrayList<>();
        //泛型在编译的时候，会检查数据类型是否正确
        //泛型的意义：1.自动对类型检查，2.自动对类型进行强制类型转换
        myArrayList.add("abc");
    }

    public static void main2(String[] args) {
        //把类型参数化了，
        MyArrayList<String> myArrayList=new MyArrayList<>();
        MyArrayList<Integer> myArrayList1=new MyArrayList<>();
        MyArrayList<Boolean> myArrayList2=new MyArrayList<>();
    }

    //写一个通用的顺序表
    public static void main1(String[] args) {
        MyArrayList myArrayList=new MyArrayList();
        myArrayList.add(1);
        myArrayList.add("aaa");
        //1.存放元素，不能指定元素，什么都能放
        //2.每次取出数据，都需要强制类型转换
        String ret=(String) myArrayList.get(1);

        //思考：能不能指定顺序表的类型？
        //指定类型之后，是不是就只能放指定类型的数据呢？
        //取出数据能不能不要进行转换？
        //加<>
    }
}
